package com.example.onlinetaxi.ui.activity.HomePage;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.fragment.app.Fragment;

import com.example.onlinetaxi.LocalStroage.LocalStorage;
import com.example.onlinetaxi.R;
import com.example.onlinetaxi.callback.HomeCallBack.IExchangeLoginMode;
import com.example.onlinetaxi.dto.DataResponse;
import com.example.onlinetaxi.ui.activity.Driver.MainPage.DriverMainActivity;
import com.example.onlinetaxi.ui.activity.MainPage.MainActivity;
import com.example.onlinetaxi.util.OKHttpUtil.GetDataResponse;
import com.example.onlinetaxi.util.OKHttpUtil.HttpUrl;
import com.example.onlinetaxi.util.OKHttpUtil.OKHttpUtil;
import com.example.onlinetaxi.util.SharedPreferenceUtil.Storage;
import com.example.onlinetaxi.util.phoneUtil.PhoneUtil;

import java.util.HashMap;
import java.util.Map;

public class LoginFragment extends Fragment {

    private View rootView;
    // login页面定义的组件
    private EditText phoneET;
    private EditText passwordET;
    private TextView exchangeTV;
    private Button loginBtn;

    // 用户输入
    private String phoneStr;
    private String passwordStr;

    // 响应体
    private DataResponse dataResponse;

    private IExchangeLoginMode exchangeLoginMode;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // 确保只赋值一次
        if (rootView == null) {
            rootView = inflater.inflate(R.layout.fragment_login, container, false);
        }

        // 初始化控件
        initView();
        // 为控件添加事件(交换事件，登录事件)
        initEvent();

        return rootView;
    }

    // 添加事件
    private void initEvent() {
        // 交换登录模式事件
        exchangeTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 进行登录模式的切换
                exchangeLoginMode.exchangeLoginMode();
            }
        });
        // 登录事件
        loginBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 验证用户输入是否合理
                if (isCorrect()) {
                    // 向后端发起登录请求
                    if (sendLoginRequest()) {
                        // 请求成功，进行页面跳转
                        // 提示用户登录成功
                        Toast.makeText(getActivity(), "登录成功！", Toast.LENGTH_SHORT).show();

                        // 手机号
                        LocalStorage.phone = phoneStr;
                        // 用户类型
                        LocalStorage.type = dataResponse.getData().get("type").toString();

                        // 用户退出登录时必须清除这些信息
                        // 将用户登录使用的手机号保存在sharedPreference中
                        Storage.putString(getActivity(), "phone", phoneStr);

                        // 根据用户类型进行页面跳转
                        if (LocalStorage.type.equals("passenger")){
                            Intent intent = new Intent(getActivity(), MainActivity.class);
                            startActivity(intent);
                        }else if (LocalStorage.type.equals("driver")){
                            Intent intent = new Intent(getActivity(), DriverMainActivity.class);
                            startActivity(intent);
                        }
                        // 结束登录界面
                        getActivity().finish();
                    }
                } else {
                    // 提示用户输入不合理
                    Toast.makeText(getActivity(), "手机号或密码输入错误！", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private boolean sendLoginRequest() {
        // 向后端发起请求
        Map<String, String> map = new HashMap<>();
        map.put("phone", phoneStr);
        map.put("password", passwordStr);

        String response = OKHttpUtil.postAsyncRequest(HttpUrl.getBaseUrl(), map, "login", "normalLogin");
        dataResponse = GetDataResponse.getDataResponse(response);

        if (dataResponse.getCode().equals("200")) {
            // 用户登录成功
            return true;
        } else {
            // 提示错误信息
            Toast.makeText(getActivity(), dataResponse.getData().get("error").toString(), Toast.LENGTH_SHORT).show();
            return false;
        }
    }

    private boolean isCorrect() {
        // 获取用户输入
        phoneStr = phoneET.getText().toString();
        passwordStr = passwordET.getText().toString();

        // 验证用户输入合理性
        if (phoneStr == null || passwordStr == null || phoneStr.equals("") || passwordStr.equals("")) {
            return false;
        }
        // 判断电话号格式是否正确
        if (!PhoneUtil.isMobileNO(phoneStr)) {
            return false;
        }

        return true;
    }

    // 用来接收父类实现的接口（callBack）
    public void setExchangeLoginMode(IExchangeLoginMode exchangeLoginMode) {
        this.exchangeLoginMode = exchangeLoginMode;
    }

    private void initView() {
        // 初始化基本控件
        phoneET = rootView.findViewById(R.id.login_et_phone);
        passwordET = rootView.findViewById(R.id.login_et_password);
        loginBtn = rootView.findViewById(R.id.login_btn);
        // 获取交换控件
        exchangeTV = rootView.findViewById(R.id.login_tv_exchange);
    }
}